home *** CD-ROM | disk | FTP | other *** search
/ SGI Origin & Onyx2 Patches 1998 May / Origin and Onyx2 System Disk Patches May 1998.img / dist / patchSG0002754.idb / usr / include / sys / PCI / pciba.h.z / pciba.h
C/C++ Source or Header  |  1998-04-01  |  3KB  |  100 lines

  1. /**************************************************************************
  2.  *                                      *
  3.  *          Copyright (C) 1997, Silicon Graphics, Inc.          *
  4.  *                                      *
  5.  *  These coded instructions, statements, and computer programs  contain  *
  6.  *  unpublished  proprietary  information of Silicon Graphics, Inc., and  *
  7.  *  are protected by Federal copyright law.  They  may  not be disclosed  *
  8.  *  to  third  parties  or copied or duplicated in any form, in whole or  *
  9.  *  in part, without the prior written consent of Silicon Graphics, Inc.  *
  10.  *                                      *
  11.  **************************************************************************/
  12. #ifndef __PCI_PCIBA_H__
  13. #define __PCI_PCIBA_H__
  14.  
  15. #include <sys/ioccom.h>
  16.  
  17. #ident "$Revision: 1.2 $"
  18.  
  19. /* /hw/.../pci/[slot]/config accepts ioctls to read
  20.  * and write specific registers as follows:
  21.  *
  22.  * "t" is the native type (char, short, uint32, uint64)
  23.  * to read from CFG space; results will be arranged in
  24.  * byte significance (ie. first byte from PCI is lowest
  25.  * or last byte in result).
  26.  *
  27.  * "r" is the byte offset in PCI CFG space of the first
  28.  * byte of the register (it's least significant byte,
  29.  * in the little-endian PCI numbering). This can actually
  30.  * be as much as 16 bits wide, and is intended to match
  31.  * the layout of a "Type 1 Configuration Space" address:
  32.  * the register number in the low eight bits, then three
  33.  * bits for the function number and five bits for the
  34.  * slot number.
  35.  */
  36. #define    PCIIOCCFGRD(t,r)    _IOR(0,(r),t)
  37. #define    PCIIOCCFGWR(t,r)    _IOW(0,(r),t)
  38.  
  39. /* Some common config register access commands.
  40.  * Use these as examples of how to construct
  41.  * values for other registers you want to access.
  42.  */
  43.  
  44. /* PCIIOCGETID: arg is ptr to 32-bit int,
  45.  * returns the 32-bit ID value with VENDOR
  46.  * in the bottom 16 bits and DEVICE in the top.
  47.  */
  48. #define    PCIIOCGETID        PCIIOCCFGRD(uint32_t,PCI_CFG_VENDOR_ID)
  49.  
  50. /* PCIIOCSETCMD: arg is ptr to a 16-bit short,
  51.  * which will be written to the CMD register.
  52.  */
  53. #define    PCIIOCSETCMD        PCIIOCCFGWR(uint16_t,PCI_CFG_COMMAND)
  54.  
  55. /* PCIIOCGETREV: arg is ptr to an 8-bit char,
  56.  * which will get the 8-bit revision number.
  57.  */
  58. #define    PCIIOCGETREV        PCIIOCCFGRD(uint8_t,PCI_CFG_REV_ID)
  59.  
  60. /* PCIIOCGETHTYPE: arg is ptr to an 8-bit char,
  61.  * which will get the 8-bit header type.
  62.  */
  63. #define    PCIIOCGETHTYPE        PCIIOCCFGRD(uint8_t,PCI_CFG_HEADER_TYPE)
  64.  
  65. /* PCIIOCGETBASE(n): arg is ptr to a 32-bit int,
  66.  * which will get the value of the BASE<n> register.
  67.  */
  68. #define    PCIIOCGETBASE(n)    PCIIOCCFGRD(uint32_t,PCI_CFG_BASE_ADDR(n))
  69.  
  70. /* /hw/.../pci/[slot]/intr accepts an ioctl to
  71.  * set up user level interrupt handling as follows:
  72.  *
  73.  * "n" is a bitmap of which of the four PCI interrupt
  74.  * lines are of interest, using PCIIO_INTR_LINE_[ABCD].
  75.  */
  76. #define    PCIIOCSETULI(n)        _IOWR(1,n,struct uliargs)
  77. #if _KERNEL
  78. #define PCIIOCSETULI32(n)    _IOWR(1,n,struct uliargs32)
  79. #endif
  80.  
  81. /* /hw/.../pci/[slot]/dma accepts ioctls to allocate
  82.  * and free physical memory for use in user-triggered
  83.  * DMA operations.
  84.  */
  85. #define    PCIIOCDMAALLOC        _IOWR(0,1,uint64_t)
  86. #define    PCIIOCDMAFREE        _IOW(0,1,uint64_t)
  87.  
  88. /* The parameter for PCIIOCDMAALLOC needs to contain
  89.  * both the size of the request and the flag values
  90.  * to be used in setting up the DMA.
  91.  *
  92.  * Any flags normally useful in pciio_dmamap
  93.  * or pciio_dmatrans function calls can6 be used here.
  94.  */
  95. #define    PCIIOCDMAALLOC_REQUEST_PACK(flags,size)        \
  96.     ((((uint64_t)(flags))<<32)|            \
  97.      (((uint64_t)(size))&0xFFFFFFFF))
  98.  
  99. #endif    /* __PCI_PCIBA_H__ */
  100.